/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.controler;

import com.camachosanchez.bean.ControlCambioNeumatico;
import com.camachosanchez.bean.DetalleControlCambioNeumatico;
import com.camachosanchez.bean.Pilotos;
import com.camachosanchez.bean.Talleres;
import com.camachosanchez.bean.Usuarios;
import com.camachosanchez.bean.Vehiculos;
import com.camachosanchez.controler.exceptions.IllegalOrphanException;
import com.camachosanchez.controler.exceptions.NonexistentEntityException;
import com.camachosanchez.util.JPAUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityNotFoundException;
import javax.persistence.Query;

/**
 *
 * @author ZULLY
 */
public class ControlCambioNeumaticoJpaController implements Serializable {

    public ControlCambioNeumaticoJpaController(EntityManagerFactory emf) {
        this.emf = JPAUtil.getEntityManagerFactory();
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(ControlCambioNeumatico controlCambioNeumatico) {
        if (controlCambioNeumatico.getDetalleControlCambioNeumaticoList() == null) {
            controlCambioNeumatico.setDetalleControlCambioNeumaticoList(new ArrayList<DetalleControlCambioNeumatico>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Vehiculos idVehiculo = controlCambioNeumatico.getIdVehiculo();
            if (idVehiculo != null) {
                idVehiculo = em.getReference(idVehiculo.getClass(), idVehiculo.getId());
                controlCambioNeumatico.setIdVehiculo(idVehiculo);
            }
            Usuarios idUsuario = controlCambioNeumatico.getIdUsuario();
            if (idUsuario != null) {
                idUsuario = em.getReference(idUsuario.getClass(), idUsuario.getId());
                controlCambioNeumatico.setIdUsuario(idUsuario);
            }
            Talleres idTaller = controlCambioNeumatico.getIdTaller();
            if (idTaller != null) {
                idTaller = em.getReference(idTaller.getClass(), idTaller.getId());
                controlCambioNeumatico.setIdTaller(idTaller);
            }
            Pilotos idPiloto = controlCambioNeumatico.getIdPiloto();
            if (idPiloto != null) {
                idPiloto = em.getReference(idPiloto.getClass(), idPiloto.getId());
                controlCambioNeumatico.setIdPiloto(idPiloto);
            }
            List<DetalleControlCambioNeumatico> attachedDetalleControlCambioNeumaticoList = new ArrayList<DetalleControlCambioNeumatico>();
            for (DetalleControlCambioNeumatico detalleControlCambioNeumaticoListDetalleControlCambioNeumaticoToAttach : controlCambioNeumatico.getDetalleControlCambioNeumaticoList()) {
                detalleControlCambioNeumaticoListDetalleControlCambioNeumaticoToAttach = em.getReference(detalleControlCambioNeumaticoListDetalleControlCambioNeumaticoToAttach.getClass(), detalleControlCambioNeumaticoListDetalleControlCambioNeumaticoToAttach.getId());
                attachedDetalleControlCambioNeumaticoList.add(detalleControlCambioNeumaticoListDetalleControlCambioNeumaticoToAttach);
            }
            controlCambioNeumatico.setDetalleControlCambioNeumaticoList(attachedDetalleControlCambioNeumaticoList);
            em.persist(controlCambioNeumatico);
            if (idVehiculo != null) {
                idVehiculo.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idVehiculo = em.merge(idVehiculo);
            }
            if (idUsuario != null) {
                idUsuario.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idUsuario = em.merge(idUsuario);
            }
            if (idTaller != null) {
                idTaller.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idTaller = em.merge(idTaller);
            }
            if (idPiloto != null) {
                idPiloto.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idPiloto = em.merge(idPiloto);
            }
            for (DetalleControlCambioNeumatico detalleControlCambioNeumaticoListDetalleControlCambioNeumatico : controlCambioNeumatico.getDetalleControlCambioNeumaticoList()) {
                ControlCambioNeumatico oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListDetalleControlCambioNeumatico = detalleControlCambioNeumaticoListDetalleControlCambioNeumatico.getIdControlCambioNeumatico();
                detalleControlCambioNeumaticoListDetalleControlCambioNeumatico.setIdControlCambioNeumatico(controlCambioNeumatico);
                detalleControlCambioNeumaticoListDetalleControlCambioNeumatico = em.merge(detalleControlCambioNeumaticoListDetalleControlCambioNeumatico);
                if (oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListDetalleControlCambioNeumatico != null) {
                    oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListDetalleControlCambioNeumatico.getDetalleControlCambioNeumaticoList().remove(detalleControlCambioNeumaticoListDetalleControlCambioNeumatico);
                    oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListDetalleControlCambioNeumatico = em.merge(oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListDetalleControlCambioNeumatico);
                }
            }
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(ControlCambioNeumatico controlCambioNeumatico) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            ControlCambioNeumatico persistentControlCambioNeumatico = em.find(ControlCambioNeumatico.class, controlCambioNeumatico.getId());
            Vehiculos idVehiculoOld = persistentControlCambioNeumatico.getIdVehiculo();
            Vehiculos idVehiculoNew = controlCambioNeumatico.getIdVehiculo();
            Usuarios idUsuarioOld = persistentControlCambioNeumatico.getIdUsuario();
            Usuarios idUsuarioNew = controlCambioNeumatico.getIdUsuario();
            Talleres idTallerOld = persistentControlCambioNeumatico.getIdTaller();
            Talleres idTallerNew = controlCambioNeumatico.getIdTaller();
            Pilotos idPilotoOld = persistentControlCambioNeumatico.getIdPiloto();
            Pilotos idPilotoNew = controlCambioNeumatico.getIdPiloto();
            List<DetalleControlCambioNeumatico> detalleControlCambioNeumaticoListOld = persistentControlCambioNeumatico.getDetalleControlCambioNeumaticoList();
            List<DetalleControlCambioNeumatico> detalleControlCambioNeumaticoListNew = controlCambioNeumatico.getDetalleControlCambioNeumaticoList();
            List<String> illegalOrphanMessages = null;
            for (DetalleControlCambioNeumatico detalleControlCambioNeumaticoListOldDetalleControlCambioNeumatico : detalleControlCambioNeumaticoListOld) {
                if (!detalleControlCambioNeumaticoListNew.contains(detalleControlCambioNeumaticoListOldDetalleControlCambioNeumatico)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain DetalleControlCambioNeumatico " + detalleControlCambioNeumaticoListOldDetalleControlCambioNeumatico + " since its idControlCambioNeumatico field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (idVehiculoNew != null) {
                idVehiculoNew = em.getReference(idVehiculoNew.getClass(), idVehiculoNew.getId());
                controlCambioNeumatico.setIdVehiculo(idVehiculoNew);
            }
            if (idUsuarioNew != null) {
                idUsuarioNew = em.getReference(idUsuarioNew.getClass(), idUsuarioNew.getId());
                controlCambioNeumatico.setIdUsuario(idUsuarioNew);
            }
            if (idTallerNew != null) {
                idTallerNew = em.getReference(idTallerNew.getClass(), idTallerNew.getId());
                controlCambioNeumatico.setIdTaller(idTallerNew);
            }
            if (idPilotoNew != null) {
                idPilotoNew = em.getReference(idPilotoNew.getClass(), idPilotoNew.getId());
                controlCambioNeumatico.setIdPiloto(idPilotoNew);
            }
            List<DetalleControlCambioNeumatico> attachedDetalleControlCambioNeumaticoListNew = new ArrayList<DetalleControlCambioNeumatico>();
            for (DetalleControlCambioNeumatico detalleControlCambioNeumaticoListNewDetalleControlCambioNeumaticoToAttach : detalleControlCambioNeumaticoListNew) {
                detalleControlCambioNeumaticoListNewDetalleControlCambioNeumaticoToAttach = em.getReference(detalleControlCambioNeumaticoListNewDetalleControlCambioNeumaticoToAttach.getClass(), detalleControlCambioNeumaticoListNewDetalleControlCambioNeumaticoToAttach.getId());
                attachedDetalleControlCambioNeumaticoListNew.add(detalleControlCambioNeumaticoListNewDetalleControlCambioNeumaticoToAttach);
            }
            detalleControlCambioNeumaticoListNew = attachedDetalleControlCambioNeumaticoListNew;
            controlCambioNeumatico.setDetalleControlCambioNeumaticoList(detalleControlCambioNeumaticoListNew);
            controlCambioNeumatico = em.merge(controlCambioNeumatico);
            if (idVehiculoOld != null && !idVehiculoOld.equals(idVehiculoNew)) {
                idVehiculoOld.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idVehiculoOld = em.merge(idVehiculoOld);
            }
            if (idVehiculoNew != null && !idVehiculoNew.equals(idVehiculoOld)) {
                idVehiculoNew.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idVehiculoNew = em.merge(idVehiculoNew);
            }
            if (idUsuarioOld != null && !idUsuarioOld.equals(idUsuarioNew)) {
                idUsuarioOld.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idUsuarioOld = em.merge(idUsuarioOld);
            }
            if (idUsuarioNew != null && !idUsuarioNew.equals(idUsuarioOld)) {
                idUsuarioNew.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idUsuarioNew = em.merge(idUsuarioNew);
            }
            if (idTallerOld != null && !idTallerOld.equals(idTallerNew)) {
                idTallerOld.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idTallerOld = em.merge(idTallerOld);
            }
            if (idTallerNew != null && !idTallerNew.equals(idTallerOld)) {
                idTallerNew.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idTallerNew = em.merge(idTallerNew);
            }
            if (idPilotoOld != null && !idPilotoOld.equals(idPilotoNew)) {
                idPilotoOld.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idPilotoOld = em.merge(idPilotoOld);
            }
            if (idPilotoNew != null && !idPilotoNew.equals(idPilotoOld)) {
                idPilotoNew.getControlCambioNeumaticoList().add(controlCambioNeumatico);
                idPilotoNew = em.merge(idPilotoNew);
            }
            for (DetalleControlCambioNeumatico detalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico : detalleControlCambioNeumaticoListNew) {
                if (!detalleControlCambioNeumaticoListOld.contains(detalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico)) {
                    ControlCambioNeumatico oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico = detalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico.getIdControlCambioNeumatico();
                    detalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico.setIdControlCambioNeumatico(controlCambioNeumatico);
                    detalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico = em.merge(detalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico);
                    if (oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico != null && !oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico.equals(controlCambioNeumatico)) {
                        oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico.getDetalleControlCambioNeumaticoList().remove(detalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico);
                        oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico = em.merge(oldIdControlCambioNeumaticoOfDetalleControlCambioNeumaticoListNewDetalleControlCambioNeumatico);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = controlCambioNeumatico.getId();
                if (findControlCambioNeumatico(id) == null) {
                    throw new NonexistentEntityException("The controlCambioNeumatico with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            ControlCambioNeumatico controlCambioNeumatico;
            try {
                controlCambioNeumatico = em.getReference(ControlCambioNeumatico.class, id);
                controlCambioNeumatico.getId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The controlCambioNeumatico with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            List<DetalleControlCambioNeumatico> detalleControlCambioNeumaticoListOrphanCheck = controlCambioNeumatico.getDetalleControlCambioNeumaticoList();
            for (DetalleControlCambioNeumatico detalleControlCambioNeumaticoListOrphanCheckDetalleControlCambioNeumatico : detalleControlCambioNeumaticoListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This ControlCambioNeumatico (" + controlCambioNeumatico + ") cannot be destroyed since the DetalleControlCambioNeumatico " + detalleControlCambioNeumaticoListOrphanCheckDetalleControlCambioNeumatico + " in its detalleControlCambioNeumaticoList field has a non-nullable idControlCambioNeumatico field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            Vehiculos idVehiculo = controlCambioNeumatico.getIdVehiculo();
            if (idVehiculo != null) {
                idVehiculo.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idVehiculo = em.merge(idVehiculo);
            }
            Usuarios idUsuario = controlCambioNeumatico.getIdUsuario();
            if (idUsuario != null) {
                idUsuario.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idUsuario = em.merge(idUsuario);
            }
            Talleres idTaller = controlCambioNeumatico.getIdTaller();
            if (idTaller != null) {
                idTaller.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idTaller = em.merge(idTaller);
            }
            Pilotos idPiloto = controlCambioNeumatico.getIdPiloto();
            if (idPiloto != null) {
                idPiloto.getControlCambioNeumaticoList().remove(controlCambioNeumatico);
                idPiloto = em.merge(idPiloto);
            }
            em.remove(controlCambioNeumatico);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<ControlCambioNeumatico> findControlCambioNeumaticoEntities() {
        return findControlCambioNeumaticoEntities(true, -1, -1);
    }

    public List<ControlCambioNeumatico> findControlCambioNeumaticoEntities(int maxResults, int firstResult) {
        return findControlCambioNeumaticoEntities(false, maxResults, firstResult);
    }

    private List<ControlCambioNeumatico> findControlCambioNeumaticoEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from ControlCambioNeumatico as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public ControlCambioNeumatico findControlCambioNeumatico(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(ControlCambioNeumatico.class, id);
        } finally {
            em.close();
        }
    }

    public int getControlCambioNeumaticoCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from ControlCambioNeumatico as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
